iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 18
0
Google Developers Machine Learning

AI可以分析股票嗎?系列 第 18

沒有實作所以只好講幹話系列(三) :: 過擬合了 !!

  • 分享至 

  • xImage
  •  

零、引言

當我們在訓練模型時,並不是訓練越久越好,雖然對訓練模型可以有好的擬合度,但對於「非訓練集」的資料卻不是這麼回事,訓練過度就有可能造成「過擬合」(overfitting)。今天就想來談一談overfitting的生平,從誕生到消滅(? 的過程,讓我們帶著輕鬆的心情把它滅了吧 (它好可憐 QQ

一、訓練中的overfitting現象

怎麼來非常簡單地理解overfitting? 可以想像一個人為了在數學考試取得高的成績,將 所有的習題的解題過程默寫並背下來 ,在期中期末考時確實地次次拿到了高分,但 卻在升學大考中大失利 ,因為 題目的變化性使得他無從默寫算式 ,明明相同的題型卻只會解某些數字搭配下的解答,這樣的情況就是overfitting了。

還是不懂啦 !!

好吧,我只是回憶一下自己耍白癡的過去(誤~ ,可以看看下方表格,這是一個例子,假如初始狀態有很多離散點,而使用回歸可以簡單解這個問題,但如果我們用網路模型去訓練的話,可以擬合出更好的模型,此時就會牽扯到「到底要擬合到什麼程度 ?」

初始狀態 Regression best overfitting

看起來overfitting很厲害耶 ! 所有點幾乎都有連到了 !! 真的可以訓練到這樣嗎 ?

是的,這是很常見的現象,就是過擬合,就跟背答案一樣 (無奈
如果使用迴歸模型,我們可以很輕易地預測新的未知點是否可以歸類為紅點,但如果是對過擬合模型,感覺將會有更高的錯誤率。

真的可以訓練到這樣的模型嗎?

如果你還是糾結於這個點的話,可以去看看上一篇「沒有實作所以只好講幹話系列(二) :: 模型中的激勵函數」中的tensorflow playground,那種點分布在使用更深的網路後都可以over fitting了,更何況是上面的圖形呢? 所以現在,對overfitting有點了解後,我們來看看他實際所會造成的現象吧!

二、overfitting與validation data

假如我們的訓練資料是上圖中的紅藍點,而訓練至過擬合後的結果也如上圖般扭曲,那麼可以想像,「對於這個訓練集」的loss肯定非常低,但此時如果我們放入新的未知紅藍點至圖形中,在擬合線附近的預測真的會準嗎?

如果測試的loss與訓練資料相差甚遠,即代表overfitting,我們訓練了一個「不能實用」的模型

所以要觀察overfitting非常簡單,測它就對了 XD

說得容易,在訓練過程中我怎麼測它 ?

這很簡單,我們只要將我們的dataset撥一點出來當作我們每次訓練完作的「驗證資料」(validation data)就好啦! 加入之後,我們就可以看到當training loss下降,validaion loss也下降,代表還可以繼續擬合,反之...我training loss下降了,但validaion loss突然不聽話地長大了Orz,這代表過擬合了。

training\validation increase decrease
increase 可能learning rate太大 反指標訓練法?
decrease overfittig keep going

所以其實要觀察出overfitting挺容易的,反倒我們真正關心的是「如何避免overfitting?」

三、常見的避免overfitting的手段

有時候,我們訓練簡單一點的應用時,因為對於模型來說「太好學了」,所以就給它overfitting了。或是另一種情況,當我們在訓練一個「非常深」的模型時,因為深的layers不容易被梯度更新,所以造成前段的layers容易overfitting,此時我們會使用dropout方式,讓層與層間變得容易傳遞,而一般的dataset可以使用大的batch size去訓練,此方式的另一個附加價值就是還能更「全局」地去訓練模型,讓我們一個一個談起吧!

1. 隨機丟棄一些運算

  • Dropout

    • 假如有一層類神經網路共有50個類神經元,假如第一次訓練時,我把其中的10個拔掉,讓剩下的去學,第二次訓練時,將他們放回去,在另外隨機選10個拔掉,讓剩下40個去學,如此反覆執行,可以想像...這個網路會很難學起,並且也有放大loss的效果,也是個有效防止overfitting的方式
  • residual殘差學習

    • Dropout概念很像,但我不是單單地拔掉幾個「神經元」,而是乾脆地在層與層之間跳躍。這樣的做法通常用在深的類神經網路,其始祖是ResNet,它最大的功效是有效更新更深的網路層,只是剛好可以一定程度上防止overfitting而已

2. 增加學習範圍

  • Data augmentation

    • 如果針對照片做旋轉或是變色,可以讓學習力降低,同時提升對「未知資料」的預測能力,可以說是兩全其美呀!
  • 加大batch size

    • 理論上,加大batch size即代表看更「全局」的資料,代表更能夠做到全局擬合,這也是我們希望的事情。但有時候太大的batch size會收斂過慢,硬體也會吃不消(記憶體、計算量等等),且有時候,小一點的資料集用大的batch size也不一定是好事。

3. 從訓練過程下手

  • Early Stopping機制

    • tensorflow幫你包好的call back function,它會幫你注意validation dataloss會不會不減反增了,當遇到此情形就停止訓練。雖然很方便,但有時候可能只是浮動了一下而已,實際應用還是要視情況而定XD
  • check point方法

    • 其實就是訓練一段後備份一下,把當下訓練的參數備份起來,雖然會花上一點記憶體,但可以在loss曲線中選擇自己認為最適合的epoch來當作最後的模型,我覺得這個也是最保險的方式 !!

四、結語

今天理解了什麼是overfitting,也知道該怎麼去警覺或是注意它,因為我們不希望使用overfitting的模型來到這個世上,它只是單單地消耗電腦效能,卻沒有實際作為。 在我之前的測試中也有出現overfitting的情況,但因為我有設立checkpoint,所以我可以透過這些「檢查點」來避免我的參數被洗掉XDD 那麼今天先到這邊,我今天有做了一點點點...點點點..再一個點的實作,從結果來看有點搞笑 哈哈哈,這將出現再明天的文章中,可以看一下放個鬆 (?

參考

Coding Neural Network — Dropout


上一篇
沒有實作所以只好講幹話系列(二) :: 模型中的激勵函數
下一篇
暴力LSTM模型實測-你是在跟我開玩笑嗎? <補>
系列文
AI可以分析股票嗎?30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言